package com.mlh.binarytree;

/**
 * @author 缪林辉
 * @date 2024/3/29 12:55
 * @DESCRIPTION
 */
// 给你一个二叉搜索树的根节点 root ，返回 树中任意两不同节点值之间的最小差值 。
// 差值是一个正数，其数值等于两值之差的绝对值。
public class GetMinimumDifference {
    int pre;
    int min;
    int flag=0;
    //二叉排序树中序遍历是升序的
    //这里利用递归来解决
    //第一次做想不到将pre定为成员变量来记住中序遍历的前值
    //很容易想到 pre被复制的顺序就是中序遍历的顺序，因此每次和pre作差，就相当于和升序序列作差一样
    //进而得出最小差值
    public int method1(TreeNode root) {
        recursion(root);
        return min;
    }
    public void recursion(TreeNode node){
        if(node==null){
            return;
        }
        recursion(node.left);
        //flag作为标志位 来标记pre第一次赋值
        //第一次赋值，pre没有前值 故不需要计算差值
        if(flag==0){
            pre=node.val;
            flag=1;
        }else{
            min=Math.abs(node.val-pre)<min?Math.abs(node.val-pre):min;
            pre=node.val;
        }
        recursion(node.right);
    }
}
